/*
 * ciudad.h
 *
 *  Created on: Jul 23, 2014
 *      Author: diego
 */

#ifndef CIUDAD_H_
#define CIUDAD_H_
#define MAX_STR_LENGTH 256

#include <list>
#include <string>
#include <fstream>
#include <queue>
#include "semaforo.h"
#include "calle.h"
#include <iostream>
#include <cstdlib> 


int Vehiculo::ctdadAutos = 0 ; 
int Vehiculo::ctdadPolicias = 0 ; 
int Vehiculo::ctdadAmbulancias = 0 ; 

class Ciudad {
private:
	std::vector<Semaforo *> semaforos;
//	std::priority_queue<Semaforo &> ranking; //Falta pasar como se comparan los semaforos.
	std::fstream cfg;

public:
	Ciudad() {

		std::string temp ;
		Semaforo * s ;
		char * aux = (char * )  malloc ( sizeof(char)*256 ) ;
		int j = 0 ;

		cfg.open("./cfg_ciudad", std::ifstream::in);
		while (cfg.good()) {
			cfg.getline(aux, MAX_STR_LENGTH, '\n');
			temp.assign(aux);
			std::string nombre = temp.substr(0, temp.find(',', 0));
			if ( j < 8){
				for (int i = 0; i < 8; i++) {
					s = new Semaforo(nombre + " y ");
					s->agregarCalle(nombre,10);
					semaforos.push_back(s);
				}
			} else if (j < 16){
				for ( int i = 0 ; i < 8 ; i++ ){
					s = semaforos.at(i*8+j-8) ;
					s->cambiarNombre(nombre) ;
					s->agregarCalle(nombre,10) ;
				}
			}
			j++ ; 
		}
	}

	bool insertarVehiculo(std::string nombreSem,std::string nombreCalle,Vehiculo & v) { 
		for ( int i = 0 ; i<semaforos.size() ; i++ ) {
			Semaforo * s = semaforos.at(i) ;
			Calle * c ;
			if (!s->getNombre().compare(nombreSem)) {
				if( s->getCalle(nombreCalle,&c) ) {
					c->agregarVehiculo(v) ; 	
					return true ; 
				}	
			}
		}
		return false ; 
	}

};

#endif /* CIUDAD_H_ */
